題目說明:給你一個字串,要將其反轉並符合以下規則:
(1)非字母的字元(如-=!等等)必須維持在同位置
(2)是字母的字元必須反轉
Case 1:
Input: s = "ab-cd"
Output: "dc-ba"
Case 2:
Input: s = "a-bC-dEf-ghIj"
Output: "j-Ih-gfE-dCba"
Case 3:
Input: s = "Test1ng-Leet=code-Q!"
Output: "Qedo1ct-eeLg=ntse-T!"
解題思路:是字母的字元要反轉,因此可以用stack進行實作。先建立一個stack把是字母的字元的字元儲存,之後遇到是非字母的字元時就將stack pop出去,有了這個概念程式也就十分好寫了。
附上程式碼以及註解
Java
class Solution {
public String reverseOnlyLetters(String s) {
Stack<Character> stack = new Stack();//stack儲存是字母的字元
for(int i=0;i<s.length();i++){
if(Character.isAlphabetic(s.charAt(i))){
stack.push(s.charAt(i));//儲存是字母的字元
}
}
String result="";//儲存結果
for(int j=0;j<s.length();j++){
if(!Character.isAlphabetic(s.charAt(j))){
result+=s.charAt(j);//遇到非字母的字元會其結果維持在將同位置
}
else{
result+=stack.pop();//遇到字母的字元結果加上stack pop出去
}
}
return result;
}
}
Python
class Solution:
def reverseOnlyLetters(self, s: str) -> str:
res=''#儲存結果
alphabet=[]#stack儲存是字母的字元
for i in s:
if i.isalpha():
alphabet.append(i)#儲存是字母的字元
for j in s:
if j.isalpha():
res+=alphabet.pop()#遇到字母的字元結果加上stack pop出去
else:
res+=j#遇到非字母的字元會其結果維持在將同位置
return res